from src import database
from src import deflef
from src import config
from src import tool
from src.draw import draw_def, draw_congestion
from src.congestion import congestion_from_cugr, run_cugr_router


def parse(db):
    print("正在解析lefdef.....")
    # 解析 LEF 列表（TLEF 已合并进 LEF，不再单独读取）
    for lf in config.LEF_FILE_LIST: deflef.parse_lef(db, lf)
    # 解析 DEF
    deflef.parse_def(db, config.DEF_FILE)

def stastic(db):
    print("正在统计信息......")
    tool.analyze_overlaps(db, config.REPORT_FILE, max_items=200)

def route(cf):
    print("正在调用路由器生成 cugr_congestion.txt......")
    run_cugr_router(
        cf.CUGR_BIN_PATH,
        cf.LEF_FILE_LIST[0] if cf.LEF_FILE_LIST else '',
        cf.DEF_FILE,
        cf.CUGR_TEMP,
        cf.CUGR_THREADS,
        cf.CUGR_RRR_ITERS,
        cf.CUGR_CONGESTION_TXT,
    )

def congestion(cf):
    print("正在分析拥塞......")
    congestion_from_cugr(cf)

def draw(cf, db):
    print("正在绘制def......")
    draw_def(db, cf)
    print("正在绘制拥塞热力图......")
    draw_congestion(db, cf)

def main():
    # 1.解析lefdef文件
    parse(database)

    # 2.重叠检测并打印统计
    stastic(database)

    # 3.调用布线器
    route(config)

    # 4.计算拥塞
    congestion(config)

    # 5.绘制def布局图
    draw(config, database)


if __name__ == '__main__':
    main()
